﻿using Volo.Abp.Domain.Entities;
using AbpVnext_Module.Model;
using Ebusiness_Domain.Model;
using System.ComponentModel.DataAnnotations.Schema;

namespace AbpVnext_Module
{
    /// <summary>
    /// 商品模型  AggregateRoot聚合根  
    /// </summary>
    [Table("Product")]
    public class Product : AggregateRoot<int>
    {
        //"领域"一个组织做的事情子领域。
        //  领域的划分(以手机公司为例)
        // 核心域:解决项目的核心问题，和组织业务紧密相关。
        // 支撑域:解决项目的非核心问题，则具有组织特性，但不具有通用性没有组织特性。
        // 通用域:解决通用问题，
        // 3、领域的不同分类决定了公司的研发重点

        //1、目的:高内聚，低耦合。有关系的实体紧密协作而关系很弱的实体被隔离。
        //2、把关系紧密的实体放到一个聚合中，每个聚合中有一个实体作为聚合根(Aggregate Root)，所有对于聚合内对象的访问都通过聚合根来进行，外部对象只能持有对聚合根的引用。
        //3、聚合根不仅仅是实体，还是所在聚合的管理者。

        //1、贫血模型一个类中只有属性或者成员变量，没有方法。
        //2、充血模型:一个类中既有属性、成员变量，也有方法。
        //需求:定义一个类保存用户的用户名、密码、积分;用户必须具有用户名;为了保证安全，密码采用密码的散列值保存;用户的初始积分为10分;每次登录成功奖励5个积分，每次登录失败扣3个积分

        //实体中的逻辑代码：管理实体的创建、状态等非业务逻辑代码
        //领域服务：聚合内的业务逻辑
        //应用服务：聚合间、和外部系统的业务逻辑

        // 商品ID
        //public int Id { get; set; }

        //// 商品名称
        //public string Name { get; set; }

        //// 商品价格
        //public decimal Price { get; set; }

        //// 商品库存数量
        public int Stock { get; set; }

        public int Id { get; set; }

        public string ProductName { get; set; }

        public int ProDuctType { get; set; }

        public DateTime CreateTime { get; set; }

        public decimal ProductPrice { get; set; }

        public List<ProductImage> productImages { get; set; }

        public Product()
        {
            //实体中的逻辑代码：管理实体的创建、状态等非业务逻辑代码
            //ProductPrice = 123;
            //CreateTime = DateTime.Now;
            //Id = 0;
        }

        public void AddProductImage(string Title)
        {
            //实体中的逻辑代码：管理实体的创建、状态等非业务逻辑代码
            var dto = productImages.Where(x => x.Title == Title).FirstOrDefault();
            if (dto != null)
            {
                //存在则修改
            }
            else
            {
                //不存添加
            }
        }

        /// <summary>
        /// 商品图片集合属性
        /// </summary>
        //public List<ProductImage> productImages { get; set; } = new List<ProductImage>();
    }

    ///// <summary>
    ///// 商品图片
    ///// </summary>
    //public class ProductImage : Entity<int>
    //{
    //    // 商品图片ID
    //    //public int Id { get; set; }

    //    // 商品名称
    //    public string Url { get; set; }

    //    public int ProductId { get; set; }

    //    public List<ProductImageOrder> ProductImageOrders { get; set; }
    //}
}
